// 导入 node.js 核心模块
const crypto = require( 'crypto' );

// 从 nanoid 模块中导入 customAlphabet 函数
const { customAlphabet } = require('nanoid');

// 自定义字母表
const alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';

/**
 * 随机产生字符串
 * @param {number} size 表示随机生成的字符串的长度(默认长度是10)
 * @returns 返回随机生成的字符串值
 */
const random = ( size = 10 ) => {
    // 采用自定义字母表和自定义字符串长度创建一个新的随机字符串生成器
    let generate = customAlphabet( alphabet , size );
    // 调用 generate 函数随机产生字符串
    let randomstring = generate();
    return randomstring;
}

/**
 * 采用盐值对源字符串进行混淆后再加密
 * @param {string} source 表示被加密的字符串
 * @param {string} salt 表示对字符串进行混淆的盐值 (默认值是空串)
 * @param {string} algorithm 表示加密算法的名称 (默认值是'SHA1')
 * @returns 返回加密后的字符串值
 */
const encrypt = (source,salt='',algorithm='SHA1') => {
    // 根据 加密算法名称 和 盐值 创建 crypto.Hmac 实例
    let hmac = crypto.createHmac( algorithm , salt );
    // 对 source 进行加密处理
    hmac.update( source );
    // 将加密后的内容以 `hex` 形式转换为字符串形式
    let encrypted = hmac.digest( 'hex' );
    // 返回加密后的字符串
    return encrypted;
}

module.exports = {
    random,
    encrypt
}